package com.example.djetpack.room

import androidx.lifecycle.LiveData
import androidx.room.*

@Dao
interface CacheDao {

    @Query("select * from test_cache where 'key'=:keyword limit 1")
    fun query(keyword: String): Cache

    //使用LiveData有什么好处呢？相比Rxjava
    //可以通过LiveData 以观察者的形式获取数据库数据，可以避免不必要的npe
    //更重要的是 他可以监听数据库表中的数据的比变化。一旦发生了 insert update delete room会自动读取表中最新的数据
    //发送给UI层 刷新页面
    @Query("select * from test_cache")
    fun queryAll():LiveData<List<Cache>>

    //删除操作非常简单 ，也可以执行sql的删除数据
    @Delete
    fun delete(cache: Cache)

    //如果是插入数据,只需要标记上Insert注解，并指明插入数据时如果已存在一条主键一样的数据，执行什么策略
    //REPLACE: 直接替换老数据
    //ABORT:终止操作，并回滚事务，也就是老数据不影响
    //IGNORE:忽略冲突，但是会插入失败
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    fun save(cache: Cache) //cache_key

    @Update()
    fun update(cache: Cache)
}